AI κ°œλ…

원문: https://docs.spring.io/spring-ai/reference/concepts.html#concept-fc


이 μ„Ήμ…˜μ—μ„œλŠ” Spring AIκ°€ μ‚¬μš©ν•˜λŠ” 핡심 κ°œλ…μ— λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€. Spring AIκ°€ κ΅¬ν˜„λ˜λŠ” 방식에 λŒ€ν•œ 아이디어λ₯Ό μ΄ν•΄ν•˜λ €λ©΄ 이 μ„Ήμ…˜μ„ μžμ„Ένžˆ μ½μ–΄λ³΄μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

λͺ¨λΈ

AI λͺ¨λΈμ€ 정보λ₯Ό μ²˜λ¦¬ν•˜κ³  μƒμ„±ν•˜λ„λ‘ μ„€κ³„λœ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ, μ’…μ’… μΈκ°„μ˜ 인지 κΈ°λŠ₯을 λͺ¨λ°©ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ λͺ¨λΈμ€ λŒ€κ·œλͺ¨ λ°μ΄ν„°μ…‹μ—μ„œ νŒ¨ν„΄κ³Ό μΈμ‚¬μ΄νŠΈλ₯Ό ν•™μŠ΅ν•¨μœΌλ‘œμ¨ 예츑, ν…μŠ€νŠΈ, 이미지 λ˜λŠ” 기타 결과물을 μƒμ„±ν•˜μ—¬ μ‚°μ—… μ „λ°˜μ˜ λ‹€μ–‘ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

AI λͺ¨λΈμ—λŠ” λ‹€μ–‘ν•œ μœ ν˜•μ΄ 있으며, 각 λͺ¨λΈμ€ νŠΉμ • μ‚¬μš© 사둀에 μ ν•©ν•©λ‹ˆλ‹€. ChatGPT와 κ·Έ μƒμ„±ν˜• AI κΈ°λŠ₯은 ν…μŠ€νŠΈ μž…λ ₯κ³Ό 좜λ ₯으둜 μ‚¬μš©μžμ˜ λ§ˆμŒμ„ μ‚¬λ‘œμž‘μ•˜μ§€λ§Œ, λ§Žμ€ λͺ¨λΈκ³Ό νšŒμ‚¬μ—μ„œ λ‹€μ–‘ν•œ μž…λ ₯κ³Ό 좜λ ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. ChatGPT μ΄μ „μ—λŠ” λ§Žμ€ μ‚¬λžŒλ“€μ΄ λ―Έλ“œμ €λ‹ˆμ™€ μŠ€ν…Œμ΄λΈ” 디퓨전과 같은 ν…μŠ€νŠΈ-이미지 생성 λͺ¨λΈμ— λ§€λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒ ν‘œλŠ” μž…λ ₯ 및 좜λ ₯ μœ ν˜•μ— 따라 μ—¬λŸ¬ λͺ¨λΈμ„ λΆ„λ₯˜ν•œ κ²ƒμž…λ‹ˆλ‹€:

Model types

Spring AIλŠ” ν˜„μž¬ μ–Έμ–΄, 이미지, μ˜€λ””μ˜€λ‘œ μž…λ ₯κ³Ό 좜λ ₯을 μ²˜λ¦¬ν•˜λŠ” λͺ¨λΈμ„ μ§€μ›ν•©λ‹ˆλ‹€. 이전 ν‘œμ˜ λ§ˆμ§€λ§‰ 행은 ν…μŠ€νŠΈλ₯Ό μž…λ ₯으둜 받아듀이고 숫자λ₯Ό 좜λ ₯ν•˜λŠ” κ²ƒμœΌλ‘œ, 더 일반적으둜 μž„λ² λ”© ν…μŠ€νŠΈλΌκ³  ν•˜λ©° AI λͺ¨λΈμ—μ„œ μ‚¬μš©λ˜λŠ” λ‚΄λΆ€ 데이터 ꡬ쑰λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. Spring AIλŠ” μž„λ² λ”©μ„ μ§€μ›ν•˜μ—¬ 보닀 κ³ κΈ‰ μ‚¬μš© 사둀λ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.

GPT와 같은 λͺ¨λΈμ„ μ°¨λ³„ν™”ν•˜λŠ” 것은 GPT-Chat Generative Pre-trained Transformer의 β€œPβ€λ‘œ μ•Œ 수 μžˆλ“―μ΄ 사전 ν•™μŠ΅λœ νŠΉμ„±μž…λ‹ˆλ‹€. 이 사전 ν•™μŠ΅ κΈ°λŠ₯은 AIλ₯Ό κ΄‘λ²”μœ„ν•œ λ¨Έμ‹ λŸ¬λ‹μ΄λ‚˜ λͺ¨λΈ ν•™μŠ΅ λ°°κ²½ 지식이 ν•„μš” μ—†λŠ” 일반 개발자 λ„κ΅¬λ‘œ μ „ν™˜ν•©λ‹ˆλ‹€.

ν”„λ‘¬ν”„νŠΈ

ν”„λ‘¬ν”„νŠΈλŠ” AI λͺ¨λΈμ΄ νŠΉμ • 좜λ ₯을 μƒμ„±ν•˜λ„λ‘ μ•ˆλ‚΄ν•˜λŠ” μ–Έμ–΄ 기반 μž…λ ₯의 기초 역할을 ν•©λ‹ˆλ‹€. ChatGPT에 μ΅μˆ™ν•œ μ‚¬λžŒλ“€μ—κ²Œ ν”„λ‘¬ν”„νŠΈλŠ” λ‹¨μˆœνžˆ API둜 μ „μ†‘λ˜λŠ” λŒ€ν™” μƒμžμ— μž…λ ₯λ˜λŠ” ν…μŠ€νŠΈμ²˜λŸΌ 보일 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ ν”„λ‘¬ν”„νŠΈμ—λŠ” κ·Έ μ΄μƒμ˜ μ˜λ―Έκ°€ 담겨 μžˆμŠ΅λ‹ˆλ‹€. λ§Žμ€ AI λͺ¨λΈμ—μ„œ ν”„λ‘¬ν”„νŠΈμ˜ ν…μŠ€νŠΈλŠ” λ‹¨μˆœν•œ λ¬Έμžμ—΄μ΄ μ•„λ‹™λ‹ˆλ‹€.

ChatGPT의 APIμ—λŠ” ν”„λ‘¬ν”„νŠΈ 내에 μ—¬λŸ¬ 개의 ν…μŠ€νŠΈ μž…λ ₯이 있으며, 각 ν…μŠ€νŠΈ μž…λ ₯μ—λŠ” 역할이 ν• λ‹Ήλ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ‹œμŠ€ν…œ 역할은 λͺ¨λΈμ— μž‘λ™ 방법을 μ•Œλ €μ£Όκ³  μƒν˜Έ μž‘μš©μ˜ μ»¨ν…μŠ€νŠΈλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. λ˜ν•œ 일반적으둜 μ‚¬μš©μžμ˜ μž…λ ₯인 μ‚¬μš©μž 역할도 μžˆμŠ΅λ‹ˆλ‹€.

효과적인 ν”„λ‘¬ν”„νŠΈλ₯Ό λ§Œλ“œλŠ” 것은 예술이자 κ³Όν•™μž…λ‹ˆλ‹€. ChatGPTλŠ” μ‚¬λžŒ κ°„μ˜ λŒ€ν™”λ₯Ό μœ„ν•΄ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” SQLκ³Ό 같은 것을 μ‚¬μš©ν•˜μ—¬ β€œμ§ˆλ¬Έβ€ν•˜λŠ” κ²ƒκ³ΌλŠ” μƒλ‹Ήνžˆ λ‹€λ¦…λ‹ˆλ‹€. λ‹€λ₯Έ μ‚¬λžŒκ³Ό λŒ€ν™”ν•˜λŠ” κ²ƒμ²˜λŸΌ AI λͺ¨λΈκ³Ό μ†Œν†΅ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ΄λŸ¬ν•œ μƒν˜Έμž‘μš© λ°©μ‹μ˜ μ€‘μš”μ„± λ•Œλ¬Έμ— "ν”„λ‘¬ν”„νŠΈ μ—”μ§€λ‹ˆμ–΄λ§"μ΄λΌλŠ” μš©μ–΄κ°€ λ…μžμ μΈ ν•™λ¬ΈμœΌλ‘œ λ“±μž₯ν–ˆμŠ΅λ‹ˆλ‹€. ν”„λ‘¬ν”„νŠΈμ˜ 효과λ₯Ό ν–₯μƒμ‹œν‚€λŠ” λ‹€μ–‘ν•œ 기법듀이 μŸμ•„μ Έ λ‚˜μ˜€κ³  μžˆμŠ΅λ‹ˆλ‹€. ν”„λ‘¬ν”„νŠΈ μ œμž‘μ— μ‹œκ°„μ„ νˆ¬μžν•˜λ©΄ 결과물을 크게 ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

ν”„λ‘¬ν”„νŠΈλ₯Ό κ³΅μœ ν•˜λŠ” 것은 κ³΅λ™μ˜ 관행이 λ˜μ—ˆμœΌλ©° 이에 λŒ€ν•œ ν•™μˆ μ  연ꡬ도 ν™œλ°œνžˆ 이루어지고 μžˆμŠ΅λ‹ˆλ‹€. 효과적인 ν”„λ‘¬ν”„νŠΈλ₯Ό λ§Œλ“œλŠ” 것이 μ–Όλ§ˆλ‚˜ 직관적이지 μ•Šμ„ 수 μžˆλŠ”μ§€λ₯Ό λ³΄μ—¬μ£ΌλŠ” 예둜, 졜근 연ꡬ 논문에 λ”°λ₯΄λ©΄ κ°€μž₯ 효과적인 ν”„λ‘¬ν”„νŠΈ 쀑 ν•˜λ‚˜λŠ” ==β€œμ‹¬ν˜Έν‘μ„ ν•˜κ³  이 μž‘μ—…μ„ λ‹¨κ³„λ³„λ‘œ μ§„ν–‰ν•˜μ„Έμš”(Take a deep breath and work on this step by step.)”==λΌλŠ” 문ꡬ둜 μ‹œμž‘ν•˜λŠ” κ²ƒμœΌλ‘œ λ‚˜νƒ€λ‚¬μŠ΅λ‹ˆλ‹€. μ–Έμ–΄κ°€ μ™œ κ·Έλ ‡κ²Œ μ€‘μš”ν•œμ§€ μ•Œ 수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€. ν˜„μž¬ 개발 쀑인 μƒˆ 버전은 말할 것도 μ—†κ³  ChatGPT 3.5와 같은 이전 λ²„μ „μ˜ κΈ°μˆ μ„ κ°€μž₯ 효과적으둜 ν™œμš©ν•˜λŠ” 방법도 아직 μ™„μ „νžˆ μ΄ν•΄ν•˜μ§€ λͺ»ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

ν”„λ‘¬ν”„νŠΈ ν…œν”Œλ¦Ώ

효과적인 ν”„λ‘¬ν”„νŠΈλ₯Ό λ§Œλ“€λ €λ©΄ μš”μ²­μ˜ μ»¨ν…μŠ€νŠΈλ₯Ό μ„€μ •ν•˜κ³  μš”μ²­μ˜ 일뢀λ₯Ό μ‚¬μš©μž μž…λ ₯에 λ§žλŠ” κ°’μœΌλ‘œ λŒ€μ²΄ν•΄μ•Ό ν•©λ‹ˆλ‹€.

이 ν”„λ‘œμ„ΈμŠ€λŠ” ν”„λ‘¬ν”„νŠΈ 생성 및 관리λ₯Ό μœ„ν•΄ 기쑴의 ν…μŠ€νŠΈ 기반 ν…œν”Œλ¦Ώ 엔진을 μ‚¬μš©ν•©λ‹ˆλ‹€. Spring AIλŠ” 이λ₯Ό μœ„ν•΄ OSS 라이브러리인 StringTemplate을 μ‚¬μš©ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ κ°„λ‹¨ν•œ ν”„λ‘¬ν”„νŠΈ ν…œν”Œλ¦Ώμ„ 생각해 λ³΄κ² μŠ΅λ‹ˆλ‹€:

Tell me a {adjective} joke about {content}.

Spring AIμ—μ„œ ν”„λ‘¬ν”„νŠΈ ν…œν”Œλ¦Ώμ€ Spring MVC μ•„ν‚€ν…μ²˜μ˜ "View"에 λΉ„μœ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν…œν”Œλ¦Ώ λ‚΄μ˜ 자리 ν‘œμ‹œμžλ₯Ό μ±„μš°κΈ° μœ„ν•΄ λͺ¨λΈ 객체(일반적으둜 java.util.Map)κ°€ μ œκ³΅λ©λ‹ˆλ‹€. β€œλ Œλ”λ§λœβ€ λ¬Έμžμ—΄μ€ AI λͺ¨λΈμ— μ œκ³΅λ˜λŠ” ν”„λ‘¬ν”„νŠΈμ˜ μ½˜ν…μΈ κ°€ λ©λ‹ˆλ‹€.

λͺ¨λΈμ— μ „μ†‘λ˜λŠ” ν”„λ‘¬ν”„νŠΈμ˜ νŠΉμ • 데이터 ν˜•μ‹μ—λŠ” μƒλ‹Ήν•œ 가변성이 μžˆμŠ΅λ‹ˆλ‹€. μ²˜μŒμ—λŠ” λ‹¨μˆœν•œ λ¬Έμžμ—΄λ‘œ μ‹œμž‘ν–ˆλ˜ ν”„λ‘¬ν”„νŠΈλŠ” μ—¬λŸ¬ λ©”μ‹œμ§€λ₯Ό ν¬ν•¨ν•˜λ„λ‘ λ°œμ „ν–ˆμœΌλ©°, 각 λ©”μ‹œμ§€μ˜ 각 λ¬Έμžμ—΄μ€ λͺ¨λΈμ— λŒ€ν•œ κ³ μœ ν•œ 역할을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

μž„λ² λ”©

μž„λ² λ”©μ€ ν…μŠ€νŠΈ, 이미지 λ˜λŠ” λ™μ˜μƒμ˜ 숫자 ν‘œν˜„μœΌλ‘œ μž…λ ₯ κ°„μ˜ 관계λ₯Ό ν¬μ°©ν•©λ‹ˆλ‹€.

μž„λ² λ”©μ€ ν…μŠ€νŠΈ, 이미지, λ™μ˜μƒμ„ 벑터라고 ν•˜λŠ” 뢀동 μ†Œμˆ˜μ  숫자 λ°°μ—΄λ‘œ λ³€ν™˜ν•˜λŠ” λ°©μ‹μœΌλ‘œ μž‘λ™ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ λ²‘ν„°λŠ” ν…μŠ€νŠΈ, 이미지 및 λ™μ˜μƒμ˜ 의미λ₯Ό ν¬μ°©ν•˜λ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μž„λ² λ”© λ°°μ—΄μ˜ 길이λ₯Ό λ²‘ν„°μ˜ 차원이라고 ν•©λ‹ˆλ‹€.

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 두 ν…μŠ€νŠΈμ˜ 벑터 ν‘œν˜„ μ‚¬μ΄μ˜ 수치적 거리λ₯Ό κ³„μ‚°ν•˜μ—¬ μž„λ² λ”© 벑터λ₯Ό μƒμ„±ν•˜λŠ” 데 μ‚¬μš©λœ 객체 κ°„μ˜ μœ μ‚¬μ„±μ„ κ²°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Embeddings

AIλ₯Ό νƒκ΅¬ν•˜λŠ” Java κ°œλ°œμžλŠ” μ΄λŸ¬ν•œ 벑터 ν‘œν˜„μ˜ 이면에 μžˆλŠ” λ³΅μž‘ν•œ μˆ˜ν•™μ  μ΄λ‘ μ΄λ‚˜ ꡬ체적인 κ΅¬ν˜„μ„ 이해할 ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€. 특히 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— AI κΈ°λŠ₯을 톡합할 λ•ŒλŠ” AI μ‹œμŠ€ν…œ λ‚΄μ—μ„œμ˜ μ—­ν• κ³Ό κΈ°λŠ₯에 λŒ€ν•œ 기본적인 μ΄ν•΄λ§Œ 있으면 μΆ©λΆ„ν•©λ‹ˆλ‹€.

μž„λ² λ”©μ€ 특히 검색 증강 생성(RAG) νŒ¨ν„΄κ³Ό 같은 μ‹€μ œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό 관련이 μžˆμŠ΅λ‹ˆλ‹€. μž„λ² λ”©μ€ μœ ν΄λ¦¬λ“œ κΈ°ν•˜ν•™μ˜ 2차원 곡간과 μœ μ‚¬ν•˜μ§€λ§Œ 더 높은 μ°¨μ›μ˜ 의미 κ³΅κ°„μ—μ„œ 데이터λ₯Ό 점으둜 ν‘œν˜„ν•  수 있게 ν•΄μ€λ‹ˆλ‹€. 즉, μœ ν΄λ¦¬λ“œ κΈ°ν•˜ν•™μ—μ„œ ν‰λ©΄μƒμ˜ 점듀이 μ’Œν‘œμ— 따라 κ°€κΉκ±°λ‚˜ λ¨Ό κ²ƒμ²˜λŸΌ, 의미 κ³΅κ°„μ—μ„œλŠ” μ λ“€μ˜ 근접성이 의미의 μœ μ‚¬μ„±μ„ λ°˜μ˜ν•©λ‹ˆλ‹€. λΉ„μŠ·ν•œ μ£Όμ œμ— λŒ€ν•œ λ¬Έμž₯은 κ·Έλž˜ν”„μ—μ„œ 점듀이 μ„œλ‘œ κ°€κΉŒμ΄ μžˆλŠ” κ²ƒμ²˜λŸΌ 이 닀차원 κ³΅κ°„μ—μ„œ 더 κ°€κΉκ²Œ λ°°μΉ˜λ©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 근접성은 ν…μŠ€νŠΈ λΆ„λ₯˜, 의미둠적 검색, 심지어 μ œν’ˆ μΆ”μ²œκ³Ό 같은 μž‘μ—…μ— 도움이 λ˜λŠ”λ°, AIκ°€ 이 ν™•μž₯된 의미둠적 ν™˜κ²½μ—μ„œμ˜ 'μœ„μΉ˜'λ₯Ό 기반으둜 κ΄€λ ¨ κ°œλ…μ„ μ‹λ³„ν•˜κ³  κ·Έλ£Ήν™”ν•  수 있게 ν•΄μ£ΌκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

이 μ‹œλ§¨ν‹± 곡간을 λ²‘ν„°λ‘œ 생각할 수 μžˆμŠ΅λ‹ˆλ‹€.

토큰

토큰은 AI λͺ¨λΈμ΄ μž‘λ™ν•˜λŠ” λ°©μ‹μ˜ ꡬ성 μš”μ†Œ 역할을 ν•©λ‹ˆλ‹€. μž…λ ₯ μ‹œ λͺ¨λΈμ€ 단어λ₯Ό ν† ν°μœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€. 좜λ ₯ μ‹œμ—λŠ” 토큰을 λ‹€μ‹œ λ‹¨μ–΄λ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.

μ˜μ–΄μ—μ„œ ν•˜λ‚˜μ˜ 토큰은 λŒ€λž΅ λ‹¨μ–΄μ˜ 75%에 ν•΄λ‹Ήν•©λ‹ˆλ‹€. 참고둜 μ…°μ΅μŠ€ν”Όμ–΄μ˜ μ „ μž‘ν’ˆμ€ μ•½ 90만 개의 λ‹¨μ–΄λ‘œ 이루어져 있으며, μ΄λŠ” μ•½ 120만 개의 ν† ν°μœΌλ‘œ ν™˜μ‚°λ©λ‹ˆλ‹€.

Tokens

더 μ€‘μš”ν•œ 것은 토큰 = λˆμ΄λΌλŠ” κ²ƒμž…λ‹ˆλ‹€. ν˜ΈμŠ€νŒ…λœ AI λͺ¨λΈμ—μ„œλŠ” μ‚¬μš©λœ 토큰 μˆ˜μ— 따라 μš”κΈˆμ΄ κ²°μ •λ©λ‹ˆλ‹€. μž…λ ₯κ³Ό 좜λ ₯ λͺ¨λ‘ 전체 토큰 μˆ˜μ— κΈ°μ—¬ν•©λ‹ˆλ‹€.

λ˜ν•œ λͺ¨λΈμ—λŠ” 단일 API ν˜ΈμΆœμ—μ„œ μ²˜λ¦¬λ˜λŠ” ν…μŠ€νŠΈμ˜ 양을 μ œν•œν•˜λŠ” 토큰 μ œν•œμ΄ μ μš©λ©λ‹ˆλ‹€. 이 μž„κ³„κ°’μ„ ν”νžˆ β€œμ»¨ν…μŠ€νŠΈ 창”이라고 ν•©λ‹ˆλ‹€. λͺ¨λΈμ€ 이 ν•œλ„λ₯Ό μ΄ˆκ³Όν•˜λŠ” ν…μŠ€νŠΈλŠ” μ²˜λ¦¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, ChatGPT3λŠ” 4K 토큰 μ œν•œμ΄ μžˆλŠ” 반면, GPT4λŠ” 8K, 16K, 32K λ“± λ‹€μ–‘ν•œ μ˜΅μ…˜μ„ μ œκ³΅ν•©λ‹ˆλ‹€. Anthropic의 Claude AI λͺ¨λΈμ€ 100K 토큰 μ œν•œμ΄ 있으며, Meta의 졜근 μ—°κ΅¬μ—μ„œλŠ” 100만 토큰 μ œν•œ λͺ¨λΈμ΄ λ„μΆœλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μˆ˜μ§‘λœ μ…°μ΅μŠ€ν”Όμ–΄μ˜ μž‘ν’ˆμ„ GPT4둜 μš”μ•½ν•˜λ €λ©΄ 데이터λ₯Ό 잘게 μͺΌκ°œκ³  λͺ¨λΈμ˜ μ»¨ν…μŠ€νŠΈ μ°½ μ œν•œ λ‚΄μ—μ„œ 데이터λ₯Ό μ œμ‹œν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ μ—”μ§€λ‹ˆμ–΄λ§ μ „λž΅μ„ κ³ μ•ˆν•΄μ•Ό ν•©λ‹ˆλ‹€. Spring AI ν”„λ‘œμ νŠΈκ°€ 이 μž‘μ—…μ— 도움이 λ©λ‹ˆλ‹€.

κ΅¬μ‘°ν™”λœ 좜λ ₯

응닡을 JSON으둜 μš”μ²­ν•˜λ”λΌλ„ AI λͺ¨λΈμ˜ 좜λ ₯은 일반적으둜 java.lang.String으둜 λ„μ°©ν•©λ‹ˆλ‹€. μ΄λŠ” μ˜¬λ°”λ₯Έ JSON일 수 μžˆμ§€λ§Œ JSON 데이터 ꡬ쑰가 μ•„λ‹™λ‹ˆλ‹€. κ·Έλƒ₯ λ¬Έμžμ—΄μΌ λΏμž…λ‹ˆλ‹€. λ˜ν•œ ν”„λ‘¬ν”„νŠΈμ˜ μΌλΆ€λ‘œ β€œfor JSON”을 μš”μ²­ν•˜λŠ” 것도 100% μ •ν™•ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ λ³΅μž‘μ„±μœΌλ‘œ 인해 μ˜λ„ν•œ 좜λ ₯을 μ–»κΈ° μœ„ν•΄ ν”„λ‘¬ν”„νŠΈλ₯Ό μƒμ„±ν•œ λ‹€μŒ κ·Έ 결과의 λ‹¨μˆœν•œ λ¬Έμžμ—΄μ„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 톡합을 μœ„ν•΄ μ‚¬μš© κ°€λŠ₯ν•œ 데이터 ꡬ쑰둜 λ³€ν™˜ν•˜λŠ” μ „λ¬Έ λΆ„μ•Όκ°€ λ“±μž₯ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

Structured Output Converter Architecture

κ΅¬μ‘°ν™”λœ 좜λ ₯ λ³€ν™˜μ€ μ„Έμ‹¬ν•˜κ²Œ λ§Œλ“€μ–΄μ§„ ν”„λ‘¬ν”„νŠΈλ₯Ό μ‚¬μš©ν•˜λ©°, μ›ν•˜λŠ” ν˜•μ‹μ„ μ–»κΈ° μœ„ν•΄ λͺ¨λΈκ³Ό μ—¬λŸ¬ 번 μƒν˜Έ μž‘μš©ν•΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€.

데이터 및 APIλ₯Ό AI λͺ¨λΈμ— κ°€μ Έμ˜€κΈ°

AI λͺ¨λΈμ— ν•™μŠ΅λ˜μ§€ μ•Šμ€ 정보λ₯Ό μ–΄λ–»κ²Œ μ œκ³΅ν•  수 μžˆμ„κΉŒμš”?

GPT 3.5/4.0 데이터셋은 2021λ…„ 9μ›”κΉŒμ§€λ§Œ ν™•μž₯λœλ‹€λŠ” 점에 μœ μ˜ν•˜μ„Έμš”. λ”°λΌμ„œ 이 λͺ¨λΈμ€ ν•΄λ‹Ή λ‚ μ§œ μ΄ν›„μ˜ 지식이 ν•„μš”ν•œ μ§ˆλ¬Έμ— λŒ€ν•œ 닡을 λͺ¨λ₯Έλ‹€κ³  λ§ν•©λ‹ˆλ‹€. ν₯미둜운 점은 이 λ°μ΄ν„°μ…‹μ˜ μš©λŸ‰μ΄ μ•½ 650GBλΌλŠ” μ μž…λ‹ˆλ‹€.

데이터λ₯Ό ν†΅ν•©ν•˜κΈ° μœ„ν•΄ AI λͺ¨λΈμ„ μ‚¬μš©μž μ§€μ •ν•˜λŠ” μ„Έ 가지 기술이 μ‘΄μž¬ν•©λ‹ˆλ‹€:

Prompt stuffing

검색 증강 생성(RAG)

μ •ν™•ν•œ AI λͺ¨λΈ 응닡을 μœ„ν•΄ κ΄€λ ¨ 데이터λ₯Ό ν”„λ‘¬ν”„νŠΈμ— 톡합해야 ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 검색 증강 생성(RAG)μ΄λΌλŠ” 기술이 λ“±μž₯ν–ˆμŠ΅λ‹ˆλ‹€.

이 μ ‘κ·Ό λ°©μ‹μ—λŠ” λ¬Έμ„œμ—μ„œ λΉ„μ •ν˜• 데이터λ₯Ό 읽고 λ³€ν™˜ν•œ λ‹€μŒ 벑터 λ°μ΄ν„°λ² μ΄μŠ€μ— κΈ°λ‘ν•˜λŠ” 일괄 처리 μŠ€νƒ€μΌμ˜ ν”„λ‘œκ·Έλž˜λ° λͺ¨λΈμ΄ ν¬ν•¨λ©λ‹ˆλ‹€. 높은 μˆ˜μ€€μ—μ„œ 이것은 ETL(μΆ”μΆœ, λ³€ν™˜ 및 λ‘œλ“œ) νŒŒμ΄ν”„λΌμΈμž…λ‹ˆλ‹€. 벑터 λ°μ΄ν„°λ² μ΄μŠ€λŠ” RAG 기술의 검색 λΆ€λΆ„μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€.

λΉ„μ •ν˜• 데이터λ₯Ό 벑터 λ°μ΄ν„°λ² μ΄μŠ€λ‘œ λ‘œλ“œν•˜λŠ” κ³Όμ •μ—μ„œ κ°€μž₯ μ€‘μš”ν•œ λ³€ν™˜ 쀑 ν•˜λ‚˜λŠ” 원본 λ¬Έμ„œλ₯Ό 더 μž‘μ€ 쑰각으둜 λΆ„ν• ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 원본 λ¬Έμ„œλ₯Ό μž‘μ€ 쑰각으둜 λΆ„ν• ν•˜λŠ” μ ˆμ°¨μ—λŠ” 두 가지 μ€‘μš”ν•œ 단계가 μžˆμŠ΅λ‹ˆλ‹€:

  1. μ½˜ν…μΈ μ˜ 의미적 경계λ₯Ό μœ μ§€ν•˜λ©΄μ„œ λ¬Έμ„œλ₯Ό μ—¬λŸ¬ λΆ€λΆ„μœΌλ‘œ λΆ„ν• ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 단락과 ν‘œκ°€ μžˆλŠ” λ¬Έμ„œμ˜ 경우, λ‹¨λ½μ΄λ‚˜ ν‘œ 쀑간에 λ¬Έμ„œλ₯Ό λΆ„ν• ν•˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€. μ½”λ“œμ˜ 경우 λ©”μ„œλ“œ κ΅¬ν˜„ 쀑간에 μ½”λ“œλ₯Ό λΆ„ν• ν•˜μ§€ λ§ˆμ„Έμš”.

  2. λ¬Έμ„œμ˜ 각 뢀뢄을 AI λͺ¨λΈμ˜ 토큰 ν•œλ„μ— λΉ„ν•΄ 크기가 μž‘μ€ λΆ€λΆ„μœΌλ‘œ 더 λΆ„ν• ν•©λ‹ˆλ‹€.

RAG의 λ‹€μŒ λ‹¨κ³„λŠ” μ‚¬μš©μž μž…λ ₯을 μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ‚¬μš©μžμ˜ μ§ˆλ¬Έμ— AI λͺ¨λΈμ΄ λ‹΅λ³€ν•΄μ•Ό ν•˜λŠ” 경우, ν•΄λ‹Ή 질문과 λͺ¨λ“  β€œμœ μ‚¬ν•œβ€ λ¬Έμ„œ 쑰각이 AI λͺ¨λΈμ— μ „μ†‘λ˜λŠ” ν”„λ‘¬ν”„νŠΈμ— λ°°μΉ˜λ©λ‹ˆλ‹€. 이것이 λ°”λ‘œ 벑터 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ μž…λ‹ˆλ‹€. 벑터 λ°μ΄ν„°λ² μ΄μŠ€λŠ” μœ μ‚¬ν•œ μ½˜ν…μΈ λ₯Ό μ°ΎλŠ” 데 맀우 λŠ₯μˆ™ν•©λ‹ˆλ‹€.

Spring AI RAG

ν•¨μˆ˜ 호좜

λŒ€κ·œλͺ¨ μ–Έμ–΄ λͺ¨λΈ(LLM)은 ν•™μŠ΅ ν›„ κ³ μ •λ˜μ–΄ 였래된 μ§€μ‹μœΌλ‘œ 이어지며 μ™ΈλΆ€ 데이터에 μ•‘μ„ΈμŠ€ν•˜κ±°λ‚˜ μˆ˜μ •ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

ν•¨μˆ˜ 호좜 λ©”μ»€λ‹ˆμ¦˜μ€ μ΄λŸ¬ν•œ 단점을 ν•΄κ²°ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 자체 ν•¨μˆ˜λ₯Ό λ“±λ‘ν•˜μ—¬ λŒ€κ·œλͺ¨ μ–Έμ–΄ λͺ¨λΈμ„ μ™ΈλΆ€ μ‹œμŠ€ν…œμ˜ API에 μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ‹œμŠ€ν…œμ€ LLM에 μ‹€μ‹œκ°„ 데이터λ₯Ό μ œκ³΅ν•˜κ³  λŒ€μ‹  데이터 처리 μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Spring AIλŠ” ν•¨μˆ˜ ν˜ΈμΆœμ„ μ§€μ›ν•˜κΈ° μœ„ν•΄ μž‘μ„±ν•΄μ•Ό ν•˜λŠ” μ½”λ“œλ₯Ό 크게 κ°„μ†Œν™”ν•©λ‹ˆλ‹€. ν•¨μˆ˜ 호좜 λŒ€ν™”λ₯Ό λŒ€μ‹  μ²˜λ¦¬ν•΄μ€λ‹ˆλ‹€. ν•¨μˆ˜λ₯Ό @Bean으둜 μ œκ³΅ν•œ λ‹€μŒ ν”„λ‘¬ν”„νŠΈ μ˜΅μ…˜μ— ν•¨μˆ˜μ˜ 빈 이름을 μ œκ³΅ν•˜μ—¬ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό ν™œμ„±ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ 단일 ν”„λ‘¬ν”„νŠΈμ—μ„œ μ—¬λŸ¬ ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜κ³  μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Function calling

  1. ν•¨μˆ˜ μ •μ˜ 정보λ₯Ό ν•¨κ»˜ μ „μ†‘ν•˜λŠ” μ±„νŒ… μš”μ²­μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. name,Β description(예: λͺ¨λΈμ΄ μ–Έμ œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•˜λŠ”μ§€ μ„€λͺ…), 'μž…λ ₯ λ§€κ°œλ³€μˆ˜'(예: ν•¨μˆ˜μ˜ μž…λ ₯ λ§€κ°œλ³€μˆ˜ μŠ€ν‚€λ§ˆ)λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

  2. λͺ¨λΈμ΄ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κΈ°λ‘œ κ²°μ •ν•˜λ©΄ μž…λ ₯ λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κ³  좜λ ₯을 λͺ¨λΈμ— λ°˜ν™˜ν•©λ‹ˆλ‹€.

  3. Spring AIκ°€ 이 λŒ€ν™”λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€. μ μ ˆν•œ ν•¨μˆ˜μ— ν•¨μˆ˜ ν˜ΈμΆœμ„ μ „μ†‘ν•˜κ³  κ·Έ κ²°κ³Όλ₯Ό λͺ¨λΈμ— λ°˜ν™˜ν•©λ‹ˆλ‹€.

  4. λͺ¨λΈμ€ ν•„μš”ν•œ λͺ¨λ“  정보λ₯Ό κ²€μƒ‰ν•˜κΈ° μœ„ν•΄ μ—¬λŸ¬ 번의 ν•¨μˆ˜ 호좜(Function Calling)을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  5. ν•„μš”ν•œ λͺ¨λ“  정보λ₯Ό νšλ“ν•˜λ©΄ λͺ¨λΈμ΄ 응닡을 μƒμ„±ν•©λ‹ˆλ‹€.

λ‹€λ₯Έ AI λͺ¨λΈμ—μ„œ 이 κΈ°λŠ₯을 μ‚¬μš©ν•˜λŠ” 방법에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ ν•¨μˆ˜ 호좜(Function Calling) μ„€λͺ…μ„œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

AI 응닡 ν‰κ°€ν•˜κΈ°

μ‚¬μš©μž μš”μ²­μ— λŒ€ν•œ AI μ‹œμŠ€ν…œμ˜ 좜λ ₯을 효과적으둜 ν‰κ°€ν•˜λŠ” 것은 μ΅œμ’… μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ •ν™•μ„±κ³Ό μœ μš©μ„±μ„ 보μž₯ν•˜λŠ” 데 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ λͺ©μ μœΌλ‘œ 사전 ν•™μŠ΅λœ λͺ¨λΈ 자체λ₯Ό μ‚¬μš©ν•  수 μžˆλŠ” λͺ‡ 가지 μƒˆλ‘œμš΄ 기술이 λ“±μž₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

이 평가 ν”„λ‘œμ„ΈμŠ€μ—λŠ” μƒμ„±λœ 응닡이 μ‚¬μš©μžμ˜ μ˜λ„ 및 쿼리의 λ§₯락과 μΌμΉ˜ν•˜λŠ”μ§€ μ—¬λΆ€λ₯Ό λΆ„μ„ν•˜λŠ” μž‘μ—…μ΄ ν¬ν•¨λ©λ‹ˆλ‹€. κ΄€λ ¨μ„±, 일관성, 사싀 μ •ν™•μ„± λ“±μ˜ λ©”νŠΈλ¦­μ„ μ‚¬μš©ν•˜μ—¬ AIκ°€ μƒμ„±ν•œ μ‘λ‹΅μ˜ ν’ˆμ§ˆμ„ μΈ‘μ •ν•©λ‹ˆλ‹€.

ν•œ 가지 μ ‘κ·Ό 방식은 μ‚¬μš©μžμ˜ μš”μ²­κ³Ό AI λͺ¨λΈμ˜ 응닡을 λͺ¨λ‘ λͺ¨λΈμ— μ œμ‹œν•˜μ—¬ 응닡이 제곡된 데이터와 μΌμΉ˜ν•˜λŠ”μ§€ μ—¬λΆ€λ₯Ό μΏΌλ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ˜ν•œ 벑터 λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯된 정보λ₯Ό 보쑰 λ°μ΄ν„°λ‘œ ν™œμš©ν•˜λ©΄ 평가 ν”„λ‘œμ„ΈμŠ€λ₯Ό κ°œμ„ ν•˜μ—¬ 응닡 관련성을 νŒλ‹¨ν•˜λŠ” 데 도움이 될 수 μžˆμŠ΅λ‹ˆλ‹€.

Spring AI ν”„λ‘œμ νŠΈλŠ” ν˜„μž¬ λͺ¨λΈ 응닡을 ν‰κ°€ν•˜κΈ° μœ„ν•œ κΈ°λ³Έ μ „λž΅μ— λŒ€ν•œ μ•‘μ„ΈμŠ€λ₯Ό μ œκ³΅ν•˜λŠ” Evaluator APIλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ 평가 ν…ŒμŠ€νŠΈ λ¬Έμ„œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.